<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>设计模式 | 月藤的博客</title>
    <meta name="generator" content="VuePress 1.8.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/2.10.0/github-markdown.min.css">
    <meta name="description" content="简单的介绍">
    
    <link rel="preload" href="/assets/css/0.styles.a2e941e0.css" as="style"><link rel="preload" href="/assets/js/app.c7d9ff18.js" as="script"><link rel="preload" href="/assets/js/2.cd56dec9.js" as="script"><link rel="preload" href="/assets/js/6.133fd621.js" as="script"><link rel="prefetch" href="/assets/js/10.21f484f8.js"><link rel="prefetch" href="/assets/js/11.5e166696.js"><link rel="prefetch" href="/assets/js/12.c56c19a2.js"><link rel="prefetch" href="/assets/js/13.3e31b609.js"><link rel="prefetch" href="/assets/js/14.3db3e5e6.js"><link rel="prefetch" href="/assets/js/15.cc75d7c3.js"><link rel="prefetch" href="/assets/js/16.5546d343.js"><link rel="prefetch" href="/assets/js/17.69b8a0f2.js"><link rel="prefetch" href="/assets/js/18.271396c8.js"><link rel="prefetch" href="/assets/js/19.bd4b0386.js"><link rel="prefetch" href="/assets/js/20.4a48d936.js"><link rel="prefetch" href="/assets/js/21.23862f34.js"><link rel="prefetch" href="/assets/js/22.95b3bd0a.js"><link rel="prefetch" href="/assets/js/23.d7c85d8e.js"><link rel="prefetch" href="/assets/js/24.c6d6dd3c.js"><link rel="prefetch" href="/assets/js/25.bb664de8.js"><link rel="prefetch" href="/assets/js/26.619789c7.js"><link rel="prefetch" href="/assets/js/27.54beb19d.js"><link rel="prefetch" href="/assets/js/28.8d77923a.js"><link rel="prefetch" href="/assets/js/29.7a771891.js"><link rel="prefetch" href="/assets/js/3.a0dd59cc.js"><link rel="prefetch" href="/assets/js/30.73e03cd7.js"><link rel="prefetch" href="/assets/js/31.a9a1ae37.js"><link rel="prefetch" href="/assets/js/32.66082a76.js"><link rel="prefetch" href="/assets/js/33.73a91496.js"><link rel="prefetch" href="/assets/js/34.da867ae2.js"><link rel="prefetch" href="/assets/js/35.6fac5ae2.js"><link rel="prefetch" href="/assets/js/36.0d6f5d22.js"><link rel="prefetch" href="/assets/js/37.c16a4955.js"><link rel="prefetch" href="/assets/js/38.3391e103.js"><link rel="prefetch" href="/assets/js/39.2e00541f.js"><link rel="prefetch" href="/assets/js/4.7f4b5eea.js"><link rel="prefetch" href="/assets/js/40.22b54e67.js"><link rel="prefetch" href="/assets/js/41.ea3ea4f8.js"><link rel="prefetch" href="/assets/js/42.3ae1db24.js"><link rel="prefetch" href="/assets/js/43.ecd8c202.js"><link rel="prefetch" href="/assets/js/44.f7609015.js"><link rel="prefetch" href="/assets/js/45.0db6f0b1.js"><link rel="prefetch" href="/assets/js/46.e28c1031.js"><link rel="prefetch" href="/assets/js/47.32d7164d.js"><link rel="prefetch" href="/assets/js/48.3aeaffda.js"><link rel="prefetch" href="/assets/js/49.33dab1c0.js"><link rel="prefetch" href="/assets/js/5.80c2b38b.js"><link rel="prefetch" href="/assets/js/50.6e41bca8.js"><link rel="prefetch" href="/assets/js/51.37e89a7c.js"><link rel="prefetch" href="/assets/js/52.e60e1d45.js"><link rel="prefetch" href="/assets/js/53.7a9c00ba.js"><link rel="prefetch" href="/assets/js/54.a214a30e.js"><link rel="prefetch" href="/assets/js/7.79403511.js"><link rel="prefetch" href="/assets/js/8.04726c3a.js"><link rel="prefetch" href="/assets/js/9.a86daf82.js">
    <link rel="stylesheet" href="/assets/css/0.styles.a2e941e0.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">月藤的博客</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="https://ziphold.gitee.io/blog/#/" target="_blank" rel="noopener noreferrer" class="nav-link external">
  旧博客（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://rattonlzh.github.io/homepage/homepage.html" target="_blank" rel="noopener noreferrer" class="nav-link external">
  常用网址导航（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Select language" class="dropdown-title"><span class="title">Languages</span> <span class="arrow down"></span></button> <button type="button" aria-label="Select language" class="mobile-dropdown-title"><span class="title">Languages</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/知识点总结/设计模式总结.html" class="nav-link">
  zh-CN
</a></li><li class="dropdown-item"><!----> <a href="/en/" class="nav-link">
  en-US
</a></li></ul></div></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><div class="avatar"><img src="/assets/img/avatar.2b77755b.png" alt srcset></div> <div style="z-index: 999"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="298" height="52" src="//music.163.com/outchain/player?type=2&id=28283137&auto=1&height=32"></iframe></div> <nav class="nav-links"><div class="nav-item"><a href="https://ziphold.gitee.io/blog/#/" target="_blank" rel="noopener noreferrer" class="nav-link external">
  旧博客（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><a href="https://rattonlzh.github.io/homepage/homepage.html" target="_blank" rel="noopener noreferrer" class="nav-link external">
  常用网址导航（停止更新）
  <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Select language" class="dropdown-title"><span class="title">Languages</span> <span class="arrow down"></span></button> <button type="button" aria-label="Select language" class="mobile-dropdown-title"><span class="title">Languages</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><!----> <a href="/知识点总结/设计模式总结.html" class="nav-link">
  zh-CN
</a></li><li class="dropdown-item"><!----> <a href="/en/" class="nav-link">
  en-US
</a></li></ul></div></div> <!----></nav>  <ul class="sidebar-links"><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>随便说说</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>知识点总结</span> <span class="arrow down"></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/知识点总结/git总结.html" class="sidebar-link">git总结</a></li><li><a href="/知识点总结/java单元测试总结.html" class="sidebar-link">java测试</a></li><li><a href="/知识点总结/jquery总结.html" class="sidebar-link">jquery初探</a></li><li><a href="/知识点总结/js总结.html" class="sidebar-link">js易错点</a></li><li><a href="/知识点总结/kotlin语法总结.html" class="sidebar-link">kotlin语法入门</a></li><li><a href="/知识点总结/latex总结.html" class="sidebar-link">latex常用代码</a></li><li><a href="/知识点总结/PS总结.html" class="sidebar-link">PS总结</a></li><li><a href="/知识点总结/springboot总结.html" class="sidebar-link">springboot进行web开发总结</a></li><li><a href="/知识点总结/thinkphp总结.html" class="sidebar-link">thinkphp入坑</a></li><li><a href="/知识点总结/uml软件建模总结.html" class="sidebar-link">uml软件建模总结</a></li><li><a href="/知识点总结/人工智能总结.html" class="sidebar-link">人工智能总结</a></li><li><a href="/知识点总结/大数据软件工程总结.html" class="sidebar-link">大数据软件工程总结</a></li><li><a href="/知识点总结/常用快捷键总结.html" class="sidebar-link">第一篇博客</a></li><li><a href="/知识点总结/数字图像处理总结.html" class="sidebar-link">数字图像处理知识点</a></li><li><a href="/知识点总结/数据库应用理论总结.html" class="sidebar-link">数据库应用复习</a></li><li><a href="/知识点总结/数据库系统概念总结.html" class="sidebar-link">数据库系统概念总结</a></li><li><a href="/知识点总结/数据挖掘总结.html" class="sidebar-link">数据挖掘总结</a></li><li><a href="/知识点总结/编译原理知识点汇总.html" class="sidebar-link">编译原理知识点汇总</a></li><li><a href="/知识点总结/设计模式总结.html" class="active sidebar-link">设计模式</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#抽象工厂模式abstract-factory" class="sidebar-link">抽象工厂模式Abstract  Factory</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#建造者模式builder" class="sidebar-link">建造者模式Builder</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#原型模式prototype" class="sidebar-link">原型模式Prototype</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#单例模式singleton" class="sidebar-link">单例模式Singleton</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#适配器模式adapter" class="sidebar-link">适配器模式Adapter</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#桥接模式bridge" class="sidebar-link">桥接模式Bridge</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#组合模式composite" class="sidebar-link">组合模式Composite</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#装饰模式decorator" class="sidebar-link">装饰模式Decorator</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#门面模式facade" class="sidebar-link">门面模式Facade</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#享元模式flyweight" class="sidebar-link">享元模式Flyweight</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#代理模式proxy" class="sidebar-link">代理模式Proxy</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#职责链模式chain-of-responsibility" class="sidebar-link">职责链模式Chain of Responsibility</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#命令模式command" class="sidebar-link">命令模式Command</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#解析器模式interpreter" class="sidebar-link">解析器模式Interpreter</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#迭代器模式iterator" class="sidebar-link">迭代器模式Iterator</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#中介模式mediator" class="sidebar-link">中介模式Mediator</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#备忘录模式memento" class="sidebar-link">备忘录模式Memento</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#观察者模式observer" class="sidebar-link">观察者模式Observer</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#状态模式state" class="sidebar-link">状态模式State</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#策略模式strategy" class="sidebar-link">策略模式Strategy</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#模板模式template-method" class="sidebar-link">模板模式Template Method</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#访问者模式visitor" class="sidebar-link">访问者模式Visitor</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#uml类图的图例" class="sidebar-link">UML类图的图例</a></li><li class="sidebar-sub-header"><a href="/知识点总结/设计模式总结.html#设计模式uml图" class="sidebar-link">设计模式uml图</a></li></ul></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>考研专区</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>读书笔记</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>开发资料</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>配置记录</span> <span class="arrow right"></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>思维导图</span> <span class="arrow right"></span></p> <!----></section></li><li><a href="/friend_link.html" class="sidebar-link">友情链接</a></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h2 id="抽象工厂模式abstract-factory"><a href="#抽象工厂模式abstract-factory" class="header-anchor">#</a> 抽象工厂模式Abstract  Factory</h2> <p>提供一个创建一系列相关或相互依赖对象的接口，客户无需用new操作符进行类对象的创建</p> <h2 id="建造者模式builder"><a href="#建造者模式builder" class="header-anchor">#</a> 建造者模式Builder</h2> <p>将一个复杂对象与它的表示分离，使得同样的构建过程可以创建不同的表示。</p> <h2 id="原型模式prototype"><a href="#原型模式prototype" class="header-anchor">#</a> 原型模式Prototype</h2> <p>用原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。</p> <h2 id="单例模式singleton"><a href="#单例模式singleton" class="header-anchor">#</a> 单例模式Singleton</h2> <p>保证一个类仅有一个实例，并提供一个访问它的全局访问点。</p> <h2 id="适配器模式adapter"><a href="#适配器模式adapter" class="header-anchor">#</a> 适配器模式Adapter</h2> <p>将一个类的接口转换成另外一个客户希望的接口，Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。</p> <h2 id="桥接模式bridge"><a href="#桥接模式bridge" class="header-anchor">#</a> 桥接模式Bridge</h2> <p>将抽象部分与它的实现部分分离，是他们都可以独立地变化。</p> <h2 id="组合模式composite"><a href="#组合模式composite" class="header-anchor">#</a> 组合模式Composite</h2> <p>将对象组合成树形结构以表示“部分——整体”地层次结构。使得用户对单个对象和组合对象的使用具有一致性。</p> <h2 id="装饰模式decorator"><a href="#装饰模式decorator" class="header-anchor">#</a> 装饰模式Decorator</h2> <p>动态地给一个对象添加一些额外地职责。就增加功能来说，Decorator模式相比生成子类模式更为灵活。</p> <h2 id="门面模式facade"><a href="#门面模式facade" class="header-anchor">#</a> 门面模式Facade</h2> <p>为子系统中地一组接口提供一个一致地界面，Facade模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。</p> <h2 id="享元模式flyweight"><a href="#享元模式flyweight" class="header-anchor">#</a> 享元模式Flyweight</h2> <p>运用共享技术有效地支持大量细粒度的对象。</p> <h2 id="代理模式proxy"><a href="#代理模式proxy" class="header-anchor">#</a> 代理模式Proxy</h2> <p>为其他对象提供一种代理以控制对这个对象的访问。</p> <h2 id="职责链模式chain-of-responsibility"><a href="#职责链模式chain-of-responsibility" class="header-anchor">#</a> 职责链模式Chain of Responsibility</h2> <p>使多个对象都有机会处理请求，从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链，沿着这条链传递该请求，直到有一个对象处理它为止。</p> <h2 id="命令模式command"><a href="#命令模式command" class="header-anchor">#</a> 命令模式Command</h2> <p>将一个请求封装为一个对象，从而使开发者可用不同的请求对客户进行参数化；对请求排队或记录请求日志，以及支持可取消的操作。</p> <h2 id="解析器模式interpreter"><a href="#解析器模式interpreter" class="header-anchor">#</a> 解析器模式Interpreter</h2> <p>给定一个语言，定义它的文法的一种表示，并定义一个解释器，这个解释器使用该表示来表示来解释语言中的句子。</p> <h2 id="迭代器模式iterator"><a href="#迭代器模式iterator" class="header-anchor">#</a> 迭代器模式Iterator</h2> <p>提供一种方法顺序访问一个聚合对象中各种元素，而又不需暴露该对象的内部表示。</p> <h2 id="中介模式mediator"><a href="#中介模式mediator" class="header-anchor">#</a> 中介模式Mediator</h2> <p>用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用，从而使其耦合松散，并且可以独立地改变它们之间地交互。</p> <h2 id="备忘录模式memento"><a href="#备忘录模式memento" class="header-anchor">#</a> 备忘录模式Memento</h2> <p>在不破坏封装性的前提下，捕获一个对象的内部状态，并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。</p> <h2 id="观察者模式observer"><a href="#观察者模式observer" class="header-anchor">#</a> 观察者模式Observer</h2> <p>定义对象间的一种一对多的依赖关系，当一个对象的状态发生改变时，所有依赖于它的对象都得到通知并被自动更新。</p> <h2 id="状态模式state"><a href="#状态模式state" class="header-anchor">#</a> 状态模式State</h2> <p>允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。</p> <h2 id="策略模式strategy"><a href="#策略模式strategy" class="header-anchor">#</a> 策略模式Strategy</h2> <p>定义一系列的算法，把它们一个个封装起来，并且使他们可相互替换。本模式使得算法可独立于使用它的客户而变化。</p> <h2 id="模板模式template-method"><a href="#模板模式template-method" class="header-anchor">#</a> 模板模式Template Method</h2> <p>定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。</p> <h2 id="访问者模式visitor"><a href="#访问者模式visitor" class="header-anchor">#</a> 访问者模式Visitor</h2> <p>表示一个作用于某对象结构中的各元素的操作。它使开发者可以在不改变各元素的类的前提下定义作用于这些元素的新操作。</p> <h2 id="uml类图的图例"><a href="#uml类图的图例" class="header-anchor">#</a> UML类图的图例</h2> <p><img src="/assets/img/1581317534233.c3577030.png" alt="1581317534233"></p> <ul><li>+:公有</li> <li>-:私有</li> <li>#:保护</li> <li>~:默认</li> <li>加下划线:静态</li> <li>矩形框表示类,用水平线分割成上下两部分, 上面的部分表示类名,下面的部分表示类的成员.如果分成三部分,则第一部分表示类名,中间部分表示类的属性,下面的部分表示类的方法</li> <li>类名斜体表示抽象</li> <li>成员属性的格式:访问控制方式 属性名:类型</li> <li>成员方法的格式:访问控制方式 方法名(参数名:类型):返回类型</li> <li>类与类之间的关系有:泛化(继承), 关联, 依赖, 聚合, 组合, 实现</li> <li>泛化(继承):有向线段,空心三角箭头,从子类指向父类</li> <li><img src="" alt="1581318135881"></li> <li>单向关联:有向线段, 类与类之间是一对多关系</li> <li><img src="" alt="1581318493506"></li> <li>多对多关联:类与类之间是多对多关系</li> <li><img src="" alt="1581318637138"></li> <li>依赖:类A在某个方法定义中用到了类B,箭头由A指向B</li> <li><img src="" alt="1581318792843"></li> <li>聚合:类B是类A的成员,类A实例销毁不会造成类B实例的销毁,箭头由A指向B</li> <li><img src="" alt="1581319060395"></li> <li>组合:类B是类A的成员,类A的实例销毁时类B的实例也会销毁,即生命周期一致,箭头由A指向B</li> <li><img src="" alt="1581319170378"></li> <li>实现:类A实现接口B,箭头由A指向B</li> <li><img src="" alt="1581319273424"></li> <li>注释:用折角矩形表示,虚线连接类与注释</li> <li><img src="/assets/img/1581319507252.53aca3ff.png" alt="1581319507252"></li></ul> <h2 id="设计模式uml图"><a href="#设计模式uml图" class="header-anchor">#</a> 设计模式uml图</h2> <p>简单工厂模式</p> <p><img src="/assets/img/1581312154135.34502b98.png" alt="1581312154135"></p> <p>工厂方法模式</p> <p><img src="/assets/img/1581312354138.c0c77af8.png" alt="1581312354138"></p> <p>抽象工厂模式</p> <p><img src="/assets/img/1581312612697.1c24632a.png" alt="1581312612697"></p> <p>单例模式</p> <p>饿汉:类加载时实例化</p> <p>懒汉:需要时实例化</p> <p><img src="/assets/img/1581312639134.f4547074.png" alt="1581312639134"></p> <p>命令模式</p> <p><img src="/assets/img/1581313588674.ace4cb0a.png" alt="1581313588674"></p> <p>迭代器模式</p> <p><img src="/assets/img/1581313661656.bad23885.png" alt="1581313661656"></p> <p>观察者模式</p> <p><img src="/assets/img/1581313682147.774ab79f.png" alt="1581313682147"></p> <p>可以实现MVC模式</p> <p><img src="/assets/img/1581313866097.d1e3c514.png" alt="1581313866097"></p> <p>策略模式</p> <p><img src="/assets/img/1581314210234.f7f484e6.png" alt="1581314210234"></p> <p>模板方法模式</p> <p>模板方法:抽象类中的基本方法和钩子方法的组合</p> <p>基本方法:实现的具体算法,可以使用抽象类的,也可以在子类中重写</p> <p>钩子方法:空方法,或默认返回true或false.复杂一点的钩子方法返回类型为boolean,用于控制基本方法的调用</p> <p>抽象方法:留到子类定义</p> <p><img src="/assets/img/1581314491891.67c8fd07.png" alt="1581314491891"></p> <p>适配器模式</p> <p>Client类:已经使用了大量Target接口的方法的类</p> <p>Target接口:旧的接口</p> <p>Adaptee:新的实现</p> <p>Adapter:继承了Adaptee类,实现了Target接口</p> <p>如果不想实现Target的全部接口,可以定义一个缺省的抽象Adapter类,不需要实现的方法定义为空方法,需要实现的方法交由子类实现</p> <p><img src="/assets/img/1581315428580.96f7b7e1.png" alt="1581315428580"></p> <p>双向适配器</p> <p><img src="/assets/img/1581315951189.9927a2b4.png" alt="1581315951189"></p> <p>组合模式</p> <p>安全组合模式:leaf类没有composite类的增删查改方法,因为本来就不需要</p> <p>透明组合模式:leaf类和composite类的方法名完全一致,外界看不出这是leaf还是composite类</p> <p><img src="/assets/img/1581316052940.13207f46.png" alt="1581316052940"></p> <p><img src="/assets/img/1581316354740.dd1623d3.png" alt="1581316354740"></p> <p>外观模式</p> <p><img src="/assets/img/1581316390613.870e0d58.png" alt="1581316390613"></p> <p>代理模式</p> <p><img src="/assets/img/1581316407418.cf1a2b3f.png" alt="1581316407418"></p></div> <footer class="page-edit"><!----> <!----> <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh"><img alt="知识共享许可协议" src="" style="border-width:0"></a><br>本作品采用<a rel="license" href="http://creativecommons.org/licenses/by/4.0/">知识共享署名 4.0 国际许可协议</a>进行许可。

   
</footer> <div class="page-nav"><p class="inner"><span class="prev">
      ←
      <a href="/知识点总结/编译原理知识点汇总.html" class="prev">
        编译原理知识点汇总
      </a></span> <span class="next"><a href="/考研专区/2021考研政治总结.html">
        2021考研政治总结
      </a>
      →
    </span></p></div>  <footer style="text-align:center;">备案号： 粤ICP备2021020303号</footer></main></div><div class="global-ui"><!----></div></div>
    <script src="/assets/js/app.c7d9ff18.js" defer></script><script src="/assets/js/2.cd56dec9.js" defer></script><script src="/assets/js/6.133fd621.js" defer></script>
  </body>
</html>
